﻿#ifndef CLIENT_READ_SESSION_H
#define CLIENT_READ_SESSION_H

#include "readsession.h"
#include "udpackclient.h"

namespace TFTP {

/**
* @brief 单个传输会话（读取） 表示单个读取会话，并存储信息关于文件和传输本身。
*/
class ClientReadSession : public TFTP::ReadSession
{
public:

    /**
    * @brief 构造函数
    * @param T 具有对等数据的TranferInfo
    * @param local 本地文件名
    * @param remote 远程文件名
    * @param trmode 传输模式
    * @note 此库仅支持八位字节传输模式
    */
    ClientReadSession(TransferInfo T, const QString &local, const QString &remote, TransferMode trmode = Octet);

    /**
    * @brief 构造函数
    * @param T 具有对等数据的TranferInfo
    * @param data   要保存的数据
    * @param remote 远程文件名
    * @param trmode 传输模式
    * @note 此库仅支持八位字节传输模式
    */
    ClientReadSession(TransferInfo T, QIODevice *data, const QString &remote, TransferMode trmode = Octet);
    ~ClientReadSession();
protected:
    /**
    * @brief 实际读取请求功能
    * @param remote 要在远程端使用的文件名
    * @note  此函数向服务器发送WRQ以启动传输。WRQ格式：
        <pre>
          2 bytes    string   1 byte     string   1 byte
          -----------------------------------------------
          WRQ|  02|  Filename  |0  |TransferMode |   0  |
          -----------------------------------------------
        </pre>
    */
    void sendRequest(const QString &remote);

};

};

#endif
